<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>Cheetah Software: RobotInterface.h Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { init_search(); });
</script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Cheetah Software
   &#160;<span id="projectnumber">1.0</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="../../namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="../../annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="../../search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="../../search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
      <li><a href="../../globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('d4/df6/_robot_interface_8h_source.html','../../');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">RobotInterface.h</div>  </div>
</div><!--header-->
<div class="contents">
<a href="../../d4/df6/_robot_interface_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#ifndef PROJECT_ROBOTINTERFACE_H</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#define PROJECT_ROBOTINTERFACE_H</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="../../d9/d53/_robot_parameters_8h.html">ControlParameters/RobotParameters.h</a>&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="../../d3/dc7/_quadruped_8h.html">Dynamics/Quadruped.h</a>&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="../../dc/d87/_periodic_task_8h.html">Utilities/PeriodicTask.h</a>&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;cheetah_visualization_lcmt.hpp&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;condition_variable&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;lcm-cpp.hpp&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;mutex&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;thread&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d2/de7/_graphics3_d_8h.html">Graphics3D.h</a>&quot;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;control_parameter_request_lcmt.hpp&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &quot;control_parameter_respones_lcmt.hpp&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;gamepad_lcmt.hpp&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"><a class="line" href="../../d4/df6/_robot_interface_8h.html#a9eb04f041ce2b07338f2a13eabd5f390">   22</a></span>&#160;<span class="preprocessor">#define ROBOT_INTERFACE_UPDATE_PERIOD (1.f / 60.f)</span></div><div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="../../d4/df6/_robot_interface_8h.html#a4887ebe3c5bc32bb6aea5503badec739">   23</a></span>&#160;<span class="preprocessor">#define INTERFACE_LCM_NAME &quot;interface&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="../../d4/df6/_robot_interface_8h.html#ab0e1910a09b5190bff3f68e23fd0717c">   24</a></span>&#160;<span class="preprocessor">#define TIMES_TO_RESEND_CONTROL_PARAM 5</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html">   26</a></span>&#160;<span class="keyword">class </span><a class="code" href="../../d6/d05/class_robot_interface.html">RobotInterface</a> : <a class="code" href="../../de/d2f/class_periodic_task.html">PeriodicTask</a> {</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;  EIGEN_MAKE_ALIGNED_OPERATOR_NEW</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;  <a class="code" href="../../d6/d05/class_robot_interface.html#af09b1f8b1e20aa72ee5e02cad4ca43c9">RobotInterface</a>(<a class="code" href="../../d9/d8e/cpp_types_8h.html#a78d284d08fd22d809fd436256f2cbc39">RobotType</a> robotType, <a class="code" href="../../de/d6f/class_graphics3_d.html">Graphics3D</a>* gfx, <a class="code" href="../../d2/d31/class_periodic_task_manager.html">PeriodicTaskManager</a>* tm, <a class="code" href="../../d8/d86/class_control_parameters.html">ControlParameters</a>&amp; userParameters);</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a273ece51bef7819a95e7924d2a130976">   31</a></span>&#160;  <a class="code" href="../../d0/d73/class_robot_control_parameters.html">RobotControlParameters</a>&amp; <a class="code" href="../../d6/d05/class_robot_interface.html#a273ece51bef7819a95e7924d2a130976">getParams</a>() { <span class="keywordflow">return</span> <a class="code" href="../../d6/d05/class_robot_interface.html#afc54fb590930fc5a67391b99212290b2">_controlParameters</a>; }</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;  <span class="keywordtype">void</span> <a class="code" href="../../d6/d05/class_robot_interface.html#afb4bc3cd443238371c6b09be6d6e2da7">startInterface</a>();</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;  <span class="keywordtype">void</span> <a class="code" href="../../d6/d05/class_robot_interface.html#a66c4458fa8f57b3b8dfe6cf3ad707a76">stopInterface</a>();</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;  <span class="keywordtype">void</span> <a class="code" href="../../d6/d05/class_robot_interface.html#a37a9d4942ce142779bf6dbdc374e239e">lcmHandler</a>();</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;  <span class="keywordtype">void</span> <a class="code" href="../../d6/d05/class_robot_interface.html#a3e8ce08dd7aa4f2127563e1eb8317140">sendControlParameter</a>(<span class="keyword">const</span> std::string&amp; name,</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;                            <a class="code" href="../../df/df2/union_control_parameter_value.html">ControlParameterValue</a> value,</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;                            <a class="code" href="../../d2/d01/_control_parameters_8h.html#a09b572cf97f12b378290dee549d8ecc3">ControlParameterValueKind</a> kind, <span class="keywordtype">bool</span> isUser);</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;  <span class="keywordtype">void</span> <a class="code" href="../../d6/d05/class_robot_interface.html#a429be295631bd7ee22cd2efc9fb74648">handleControlParameter</a>(<span class="keyword">const</span> lcm::ReceiveBuffer* rbuf,</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;                              <span class="keyword">const</span> std::string&amp; chan,</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;                              <span class="keyword">const</span> control_parameter_respones_lcmt* msg);</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;  <span class="keywordtype">void</span> <a class="code" href="../../d6/d05/class_robot_interface.html#a1a13156279b80e488f9535374f66a8f8">handleVisualizationData</a>(<span class="keyword">const</span> lcm::ReceiveBuffer* rbuf,</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;                               <span class="keyword">const</span> std::string&amp; chan,</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;                               <span class="keyword">const</span> cheetah_visualization_lcmt* msg);</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a4600563c9f745e9d9e649a8db1f8cd78">   47</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="../../d6/d05/class_robot_interface.html#a4600563c9f745e9d9e649a8db1f8cd78">init</a>() {}</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;  <span class="keywordtype">void</span> <a class="code" href="../../d6/d05/class_robot_interface.html#a3432a54d34a7752e6e25bb0bcaa0be2a">run</a>();</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#aed1c0409402e993b2068b3ba98f080ea">   49</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="../../d6/d05/class_robot_interface.html#aed1c0409402e993b2068b3ba98f080ea">cleanup</a>() {}</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a24f0dd5cc49131a10332f3508d270c4f">   50</a></span>&#160;  <span class="keyword">virtual</span> <a class="code" href="../../d6/d05/class_robot_interface.html#a24f0dd5cc49131a10332f3508d270c4f">~RobotInterface</a>() {</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="keyword">delete</span> <a class="code" href="../../d6/d05/class_robot_interface.html#a4a34157eaef8da58c6ecdb67b327fa1b">_simulator</a>;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <a class="code" href="../../de/d2f/class_periodic_task.html#ad24498c03bd938845244546d52dfa24b">stop</a>();</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  }</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a216fc2b04f9d10c9ef793e43ee19b160">   56</a></span>&#160;  <a class="code" href="../../d2/d31/class_periodic_task_manager.html">PeriodicTaskManager</a> <a class="code" href="../../d6/d05/class_robot_interface.html#a216fc2b04f9d10c9ef793e43ee19b160">_taskManager</a>;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a0d0fd14cf6a7585df326ec2f39591e99">   57</a></span>&#160;  gamepad_lcmt <a class="code" href="../../d6/d05/class_robot_interface.html#a0d0fd14cf6a7585df326ec2f39591e99">_gamepad_lcmt</a>;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a5841b4fc840c609b82c09695b019324f">   58</a></span>&#160;  control_parameter_request_lcmt <a class="code" href="../../d6/d05/class_robot_interface.html#a5841b4fc840c609b82c09695b019324f">_parameter_request_lcmt</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#acdb1b64161be2d3023eb190db359024b">   59</a></span>&#160;  <span class="keywordtype">bool</span> <a class="code" href="../../d6/d05/class_robot_interface.html#acdb1b64161be2d3023eb190db359024b">_pendingControlParameterSend</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#ac0619d8ee5cc5a8dcd5ab013ab666a4f">   60</a></span>&#160;  lcm::LCM <a class="code" href="../../d6/d05/class_robot_interface.html#ac0619d8ee5cc5a8dcd5ab013ab666a4f">_lcm</a>;</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#aab2d9c2ec0b91055e1733203f1cc65fd">   61</a></span>&#160;  uint64_t <a class="code" href="../../d6/d05/class_robot_interface.html#aab2d9c2ec0b91055e1733203f1cc65fd">_robotID</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a41c774573f1d0eb179ff11490560916f">   62</a></span>&#160;  std::thread <a class="code" href="../../d6/d05/class_robot_interface.html#a41c774573f1d0eb179ff11490560916f">_lcmThread</a>;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a0f20b7c38f67e29602c2144ace3a7efd">   63</a></span>&#160;  <a class="code" href="../../d3/d60/struct_visualization_data.html">VisualizationData</a> <a class="code" href="../../d6/d05/class_robot_interface.html#a0f20b7c38f67e29602c2144ace3a7efd">_visualizationData</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#afc54fb590930fc5a67391b99212290b2">   64</a></span>&#160;  <a class="code" href="../../d0/d73/class_robot_control_parameters.html">RobotControlParameters</a> <a class="code" href="../../d6/d05/class_robot_interface.html#afc54fb590930fc5a67391b99212290b2">_controlParameters</a>;</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a3d32b8022d60e56807eed703a04434cd">   65</a></span>&#160;  <a class="code" href="../../d8/d86/class_control_parameters.html">ControlParameters</a>&amp; <a class="code" href="../../d6/d05/class_robot_interface.html#a3d32b8022d60e56807eed703a04434cd">_userParameters</a>;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#ab19d7cfebd317120842bf6ee02148c9a">   66</a></span>&#160;  <a class="code" href="../../de/d6f/class_graphics3_d.html">Graphics3D</a>* <a class="code" href="../../d6/d05/class_robot_interface.html#ab19d7cfebd317120842bf6ee02148c9a">_gfx</a>;</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a6afbb91c13e10d398d3c63ccb737c154">   67</a></span>&#160;  <a class="code" href="../../d9/d8e/cpp_types_8h.html#a78d284d08fd22d809fd436256f2cbc39">RobotType</a> <a class="code" href="../../d6/d05/class_robot_interface.html#a6afbb91c13e10d398d3c63ccb737c154">_robotType</a>;</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a6ad653a1de21fd21b4e2a33d63c9ce49">   68</a></span>&#160;  <span class="keywordtype">bool</span> <a class="code" href="../../d6/d05/class_robot_interface.html#a6ad653a1de21fd21b4e2a33d63c9ce49">_running</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a675844aed8b0339ead4c148abfe63f6c">   70</a></span>&#160;  std::mutex <a class="code" href="../../d6/d05/class_robot_interface.html#a675844aed8b0339ead4c148abfe63f6c">_lcmMutex</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a43d8c26122ba2ff8abd5e8186fb385df">   71</a></span>&#160;  std::condition_variable <a class="code" href="../../d6/d05/class_robot_interface.html#a43d8c26122ba2ff8abd5e8186fb385df">_lcmCV</a>;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a2a4906638d332684c98c649466a52e69">   72</a></span>&#160;  <span class="keywordtype">bool</span> <a class="code" href="../../d6/d05/class_robot_interface.html#a2a4906638d332684c98c649466a52e69">_waitingForLcmResponse</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a1381d61f93d9fbcbe3760f3f7471bdcc">   73</a></span>&#160;  <span class="keywordtype">bool</span> <a class="code" href="../../d6/d05/class_robot_interface.html#a1381d61f93d9fbcbe3760f3f7471bdcc">_lcmResponseBad</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;  <span class="comment">// forward kinematics</span></div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a03d7f8dac509fe6a544e006b1702a5de">   76</a></span>&#160;  <a class="code" href="../../dc/d66/class_quadruped.html">Quadruped&lt;double&gt;</a> <a class="code" href="../../d6/d05/class_robot_interface.html#a03d7f8dac509fe6a544e006b1702a5de">_quadruped</a>;</div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a3d23751ea664ba1ed21be45e55029417">   77</a></span>&#160;  <a class="code" href="../../d6/db1/class_floating_base_model.html">FloatingBaseModel&lt;double&gt;</a> <a class="code" href="../../d6/d05/class_robot_interface.html#a3d23751ea664ba1ed21be45e55029417">_model</a>;</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a4a34157eaef8da58c6ecdb67b327fa1b">   78</a></span>&#160;  <a class="code" href="../../d7/d9c/class_dynamics_simulator.html">DynamicsSimulator&lt;double&gt;</a>* <a class="code" href="../../d6/d05/class_robot_interface.html#a4a34157eaef8da58c6ecdb67b327fa1b">_simulator</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="../../d6/d05/class_robot_interface.html#a367d5776cf4416b081e282dafa5d76e6">   79</a></span>&#160;  <a class="code" href="../../de/d75/struct_f_b_model_state.html">FBModelState&lt;double&gt;</a> <a class="code" href="../../d6/d05/class_robot_interface.html#a367d5776cf4416b081e282dafa5d76e6">_fwdKinState</a>;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;};</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="preprocessor">#endif  // PROJECT_ROBOTINTERFACE_H</span></div><div class="ttc" id="class_robot_interface_html_a6afbb91c13e10d398d3c63ccb737c154"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a6afbb91c13e10d398d3c63ccb737c154">RobotInterface::_robotType</a></div><div class="ttdeci">RobotType _robotType</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00067">RobotInterface.h:67</a></div></div>
<div class="ttc" id="class_robot_interface_html_a3d23751ea664ba1ed21be45e55029417"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a3d23751ea664ba1ed21be45e55029417">RobotInterface::_model</a></div><div class="ttdeci">FloatingBaseModel&lt; double &gt; _model</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00077">RobotInterface.h:77</a></div></div>
<div class="ttc" id="class_dynamics_simulator_html"><div class="ttname"><a href="../../d7/d9c/class_dynamics_simulator.html">DynamicsSimulator&lt; double &gt;</a></div></div>
<div class="ttc" id="class_robot_interface_html_a3e8ce08dd7aa4f2127563e1eb8317140"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a3e8ce08dd7aa4f2127563e1eb8317140">RobotInterface::sendControlParameter</a></div><div class="ttdeci">void sendControlParameter(const std::string &amp;name, ControlParameterValue value, ControlParameterValueKind kind, bool isUser)</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d4a/_robot_interface_8cpp_source.html#l00096">RobotInterface.cpp:96</a></div></div>
<div class="ttc" id="_control_parameters_8h_html_a09b572cf97f12b378290dee549d8ecc3"><div class="ttname"><a href="../../d2/d01/_control_parameters_8h.html#a09b572cf97f12b378290dee549d8ecc3">ControlParameterValueKind</a></div><div class="ttdeci">ControlParameterValueKind</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d01/_control_parameters_8h_source.html#l00034">ControlParameters.h:34</a></div></div>
<div class="ttc" id="class_quadruped_html"><div class="ttname"><a href="../../dc/d66/class_quadruped.html">Quadruped&lt; double &gt;</a></div></div>
<div class="ttc" id="class_control_parameters_html"><div class="ttname"><a href="../../d8/d86/class_control_parameters.html">ControlParameters</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d01/_control_parameters_8h_source.html#l00391">ControlParameters.h:391</a></div></div>
<div class="ttc" id="class_robot_interface_html_af09b1f8b1e20aa72ee5e02cad4ca43c9"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#af09b1f8b1e20aa72ee5e02cad4ca43c9">RobotInterface::RobotInterface</a></div><div class="ttdeci">EIGEN_MAKE_ALIGNED_OPERATOR_NEW RobotInterface(RobotType robotType, Graphics3D *gfx, PeriodicTaskManager *tm, ControlParameters &amp;userParameters)</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d4a/_robot_interface_8cpp_source.html#l00008">RobotInterface.cpp:8</a></div></div>
<div class="ttc" id="_quadruped_8h_html"><div class="ttname"><a href="../../d3/dc7/_quadruped_8h.html">Quadruped.h</a></div><div class="ttdoc">Data structure containing parameters for quadruped robot. </div></div>
<div class="ttc" id="_periodic_task_8h_html"><div class="ttname"><a href="../../dc/d87/_periodic_task_8h.html">PeriodicTask.h</a></div><div class="ttdoc">Implementation of a periodic function running in a separate thread. Periodic tasks have a task manage...</div></div>
<div class="ttc" id="class_graphics3_d_html"><div class="ttname"><a href="../../de/d6f/class_graphics3_d.html">Graphics3D</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d2/de7/_graphics3_d_8h_source.html#l00033">Graphics3D.h:33</a></div></div>
<div class="ttc" id="_robot_parameters_8h_html"><div class="ttname"><a href="../../d9/d53/_robot_parameters_8h.html">RobotParameters.h</a></div></div>
<div class="ttc" id="class_robot_control_parameters_html"><div class="ttname"><a href="../../d0/d73/class_robot_control_parameters.html">RobotControlParameters</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d9/d53/_robot_parameters_8h_source.html#l00012">RobotParameters.h:12</a></div></div>
<div class="ttc" id="struct_visualization_data_html"><div class="ttname"><a href="../../d3/d60/struct_visualization_data.html">VisualizationData</a></div><div class="ttdef"><b>Definition:</b> <a href="../../df/d0d/_visualization_data_8h_source.html#l00060">VisualizationData.h:60</a></div></div>
<div class="ttc" id="union_control_parameter_value_html"><div class="ttname"><a href="../../df/df2/union_control_parameter_value.html">ControlParameterValue</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d2/d01/_control_parameters_8h_source.html#l00055">ControlParameters.h:55</a></div></div>
<div class="ttc" id="class_periodic_task_html"><div class="ttname"><a href="../../de/d2f/class_periodic_task.html">PeriodicTask</a></div><div class="ttdef"><b>Definition:</b> <a href="../../dc/d87/_periodic_task_8h_source.html#l00019">PeriodicTask.h:19</a></div></div>
<div class="ttc" id="class_robot_interface_html_aab2d9c2ec0b91055e1733203f1cc65fd"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#aab2d9c2ec0b91055e1733203f1cc65fd">RobotInterface::_robotID</a></div><div class="ttdeci">uint64_t _robotID</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00061">RobotInterface.h:61</a></div></div>
<div class="ttc" id="class_periodic_task_html_ad24498c03bd938845244546d52dfa24b"><div class="ttname"><a href="../../de/d2f/class_periodic_task.html#ad24498c03bd938845244546d52dfa24b">PeriodicTask::stop</a></div><div class="ttdeci">void stop()</div><div class="ttdef"><b>Definition:</b> <a href="../../de/df7/_periodic_task_8cpp_source.html#l00031">PeriodicTask.cpp:31</a></div></div>
<div class="ttc" id="class_robot_interface_html_a367d5776cf4416b081e282dafa5d76e6"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a367d5776cf4416b081e282dafa5d76e6">RobotInterface::_fwdKinState</a></div><div class="ttdeci">FBModelState&lt; double &gt; _fwdKinState</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00079">RobotInterface.h:79</a></div></div>
<div class="ttc" id="class_robot_interface_html_aed1c0409402e993b2068b3ba98f080ea"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#aed1c0409402e993b2068b3ba98f080ea">RobotInterface::cleanup</a></div><div class="ttdeci">void cleanup()</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00049">RobotInterface.h:49</a></div></div>
<div class="ttc" id="class_robot_interface_html_afb4bc3cd443238371c6b09be6d6e2da7"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#afb4bc3cd443238371c6b09be6d6e2da7">RobotInterface::startInterface</a></div><div class="ttdeci">void startInterface()</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d4a/_robot_interface_8cpp_source.html#l00176">RobotInterface.cpp:176</a></div></div>
<div class="ttc" id="class_robot_interface_html_a429be295631bd7ee22cd2efc9fb74648"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a429be295631bd7ee22cd2efc9fb74648">RobotInterface::handleControlParameter</a></div><div class="ttdeci">void handleControlParameter(const lcm::ReceiveBuffer *rbuf, const std::string &amp;chan, const control_parameter_respones_lcmt *msg)</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d4a/_robot_interface_8cpp_source.html#l00152">RobotInterface.cpp:152</a></div></div>
<div class="ttc" id="class_robot_interface_html_a3432a54d34a7752e6e25bb0bcaa0be2a"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a3432a54d34a7752e6e25bb0bcaa0be2a">RobotInterface::run</a></div><div class="ttdeci">void run()</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d4a/_robot_interface_8cpp_source.html#l00085">RobotInterface.cpp:85</a></div></div>
<div class="ttc" id="class_robot_interface_html_a216fc2b04f9d10c9ef793e43ee19b160"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a216fc2b04f9d10c9ef793e43ee19b160">RobotInterface::_taskManager</a></div><div class="ttdeci">PeriodicTaskManager _taskManager</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00056">RobotInterface.h:56</a></div></div>
<div class="ttc" id="class_robot_interface_html_a24f0dd5cc49131a10332f3508d270c4f"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a24f0dd5cc49131a10332f3508d270c4f">RobotInterface::~RobotInterface</a></div><div class="ttdeci">virtual ~RobotInterface()</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00050">RobotInterface.h:50</a></div></div>
<div class="ttc" id="struct_f_b_model_state_html"><div class="ttname"><a href="../../de/d75/struct_f_b_model_state.html">FBModelState&lt; double &gt;</a></div></div>
<div class="ttc" id="class_robot_interface_html_a41c774573f1d0eb179ff11490560916f"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a41c774573f1d0eb179ff11490560916f">RobotInterface::_lcmThread</a></div><div class="ttdeci">std::thread _lcmThread</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00062">RobotInterface.h:62</a></div></div>
<div class="ttc" id="class_robot_interface_html_a273ece51bef7819a95e7924d2a130976"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a273ece51bef7819a95e7924d2a130976">RobotInterface::getParams</a></div><div class="ttdeci">RobotControlParameters &amp; getParams()</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00031">RobotInterface.h:31</a></div></div>
<div class="ttc" id="class_robot_interface_html_a4600563c9f745e9d9e649a8db1f8cd78"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a4600563c9f745e9d9e649a8db1f8cd78">RobotInterface::init</a></div><div class="ttdeci">void init()</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00047">RobotInterface.h:47</a></div></div>
<div class="ttc" id="class_robot_interface_html_a03d7f8dac509fe6a544e006b1702a5de"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a03d7f8dac509fe6a544e006b1702a5de">RobotInterface::_quadruped</a></div><div class="ttdeci">Quadruped&lt; double &gt; _quadruped</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00076">RobotInterface.h:76</a></div></div>
<div class="ttc" id="class_robot_interface_html_a1a13156279b80e488f9535374f66a8f8"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a1a13156279b80e488f9535374f66a8f8">RobotInterface::handleVisualizationData</a></div><div class="ttdeci">void handleVisualizationData(const lcm::ReceiveBuffer *rbuf, const std::string &amp;chan, const cheetah_visualization_lcmt *msg)</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d4a/_robot_interface_8cpp_source.html#l00064">RobotInterface.cpp:64</a></div></div>
<div class="ttc" id="class_robot_interface_html_a0f20b7c38f67e29602c2144ace3a7efd"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a0f20b7c38f67e29602c2144ace3a7efd">RobotInterface::_visualizationData</a></div><div class="ttdeci">VisualizationData _visualizationData</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00063">RobotInterface.h:63</a></div></div>
<div class="ttc" id="class_robot_interface_html_a5841b4fc840c609b82c09695b019324f"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a5841b4fc840c609b82c09695b019324f">RobotInterface::_parameter_request_lcmt</a></div><div class="ttdeci">control_parameter_request_lcmt _parameter_request_lcmt</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00058">RobotInterface.h:58</a></div></div>
<div class="ttc" id="class_robot_interface_html_ab19d7cfebd317120842bf6ee02148c9a"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#ab19d7cfebd317120842bf6ee02148c9a">RobotInterface::_gfx</a></div><div class="ttdeci">Graphics3D * _gfx</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00066">RobotInterface.h:66</a></div></div>
<div class="ttc" id="class_robot_interface_html_a6ad653a1de21fd21b4e2a33d63c9ce49"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a6ad653a1de21fd21b4e2a33d63c9ce49">RobotInterface::_running</a></div><div class="ttdeci">bool _running</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00068">RobotInterface.h:68</a></div></div>
<div class="ttc" id="class_robot_interface_html_a4a34157eaef8da58c6ecdb67b327fa1b"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a4a34157eaef8da58c6ecdb67b327fa1b">RobotInterface::_simulator</a></div><div class="ttdeci">DynamicsSimulator&lt; double &gt; * _simulator</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00078">RobotInterface.h:78</a></div></div>
<div class="ttc" id="class_robot_interface_html_a66c4458fa8f57b3b8dfe6cf3ad707a76"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a66c4458fa8f57b3b8dfe6cf3ad707a76">RobotInterface::stopInterface</a></div><div class="ttdeci">void stopInterface()</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d4a/_robot_interface_8cpp_source.html#l00193">RobotInterface.cpp:193</a></div></div>
<div class="ttc" id="class_robot_interface_html_acdb1b64161be2d3023eb190db359024b"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#acdb1b64161be2d3023eb190db359024b">RobotInterface::_pendingControlParameterSend</a></div><div class="ttdeci">bool _pendingControlParameterSend</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00059">RobotInterface.h:59</a></div></div>
<div class="ttc" id="class_floating_base_model_html"><div class="ttname"><a href="../../d6/db1/class_floating_base_model.html">FloatingBaseModel&lt; double &gt;</a></div></div>
<div class="ttc" id="class_robot_interface_html_a675844aed8b0339ead4c148abfe63f6c"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a675844aed8b0339ead4c148abfe63f6c">RobotInterface::_lcmMutex</a></div><div class="ttdeci">std::mutex _lcmMutex</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00070">RobotInterface.h:70</a></div></div>
<div class="ttc" id="class_robot_interface_html_a2a4906638d332684c98c649466a52e69"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a2a4906638d332684c98c649466a52e69">RobotInterface::_waitingForLcmResponse</a></div><div class="ttdeci">bool _waitingForLcmResponse</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00072">RobotInterface.h:72</a></div></div>
<div class="ttc" id="cpp_types_8h_html_a78d284d08fd22d809fd436256f2cbc39"><div class="ttname"><a href="../../d9/d8e/cpp_types_8h.html#a78d284d08fd22d809fd436256f2cbc39">RobotType</a></div><div class="ttdeci">RobotType</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/d8e/cpp_types_8h_source.html#l00120">cppTypes.h:120</a></div></div>
<div class="ttc" id="class_robot_interface_html_a43d8c26122ba2ff8abd5e8186fb385df"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a43d8c26122ba2ff8abd5e8186fb385df">RobotInterface::_lcmCV</a></div><div class="ttdeci">std::condition_variable _lcmCV</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00071">RobotInterface.h:71</a></div></div>
<div class="ttc" id="class_robot_interface_html_a1381d61f93d9fbcbe3760f3f7471bdcc"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a1381d61f93d9fbcbe3760f3f7471bdcc">RobotInterface::_lcmResponseBad</a></div><div class="ttdeci">bool _lcmResponseBad</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00073">RobotInterface.h:73</a></div></div>
<div class="ttc" id="class_robot_interface_html_a0d0fd14cf6a7585df326ec2f39591e99"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a0d0fd14cf6a7585df326ec2f39591e99">RobotInterface::_gamepad_lcmt</a></div><div class="ttdeci">gamepad_lcmt _gamepad_lcmt</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00057">RobotInterface.h:57</a></div></div>
<div class="ttc" id="class_robot_interface_html_afc54fb590930fc5a67391b99212290b2"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#afc54fb590930fc5a67391b99212290b2">RobotInterface::_controlParameters</a></div><div class="ttdeci">RobotControlParameters _controlParameters</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00064">RobotInterface.h:64</a></div></div>
<div class="ttc" id="class_robot_interface_html"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html">RobotInterface</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00026">RobotInterface.h:26</a></div></div>
<div class="ttc" id="class_robot_interface_html_a37a9d4942ce142779bf6dbdc374e239e"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a37a9d4942ce142779bf6dbdc374e239e">RobotInterface::lcmHandler</a></div><div class="ttdeci">void lcmHandler()</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d4a/_robot_interface_8cpp_source.html#l00202">RobotInterface.cpp:202</a></div></div>
<div class="ttc" id="class_periodic_task_manager_html"><div class="ttname"><a href="../../d2/d31/class_periodic_task_manager.html">PeriodicTaskManager</a></div><div class="ttdef"><b>Definition:</b> <a href="../../dc/d87/_periodic_task_8h_source.html#l00057">PeriodicTask.h:57</a></div></div>
<div class="ttc" id="class_robot_interface_html_a3d32b8022d60e56807eed703a04434cd"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#a3d32b8022d60e56807eed703a04434cd">RobotInterface::_userParameters</a></div><div class="ttdeci">ControlParameters &amp; _userParameters</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00065">RobotInterface.h:65</a></div></div>
<div class="ttc" id="class_robot_interface_html_ac0619d8ee5cc5a8dcd5ab013ab666a4f"><div class="ttname"><a href="../../d6/d05/class_robot_interface.html#ac0619d8ee5cc5a8dcd5ab013ab666a4f">RobotInterface::_lcm</a></div><div class="ttdeci">lcm::LCM _lcm</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df6/_robot_interface_8h_source.html#l00060">RobotInterface.h:60</a></div></div>
<div class="ttc" id="_graphics3_d_8h_html"><div class="ttname"><a href="../../d2/de7/_graphics3_d_8h.html">Graphics3D.h</a></div><div class="ttdoc">Visualizer window for simulator. </div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="../../dir_43e0a1f539e00dcfa1a6bc4d4fee4fc2.html">home</a></li><li class="navelem"><a class="el" href="../../dir_61bfb0b3cdda81b1b0355ba34eb3b1eb.html">dhkim</a></li><li class="navelem"><a class="el" href="../../dir_adee5b101e079090017bb4e91c628ead.html">Public_Repository</a></li><li class="navelem"><a class="el" href="../../dir_7fc07a7b97001e7b1d18e11da761e2de.html">Cheetah-Software</a></li><li class="navelem"><a class="el" href="../../dir_e380f5e928ac62e3c78e1e401f2404bd.html">sim</a></li><li class="navelem"><a class="el" href="../../dir_ad06ce47554390031628fa046f7fdb3f.html">include</a></li><li class="navelem"><a class="el" href="../../d4/df6/_robot_interface_8h.html">RobotInterface.h</a></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="../../doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
  </ul>
</div>
</body>
</html>
